/*
 * TableroSDL.h
 *
 *  Created on: 23/10/2013
 *      Author: fernando
 */

#ifndef TABLEROSDL_H_
#define TABLEROSDL_H_

#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include "SDL.h"
#include <vector>
#include <string>
#include "CeldaSDL.h"
#include "Golosina.h"
#include "Puntaje.h"
#include  "jsoncpp/json/json.h"
#include "Jugada.h"
#include "SDL/SDL_mixer.h"

const int SIZEEXTRA = 400;

class TableroSDL : public SDL {
public:
	//Crea un tablero con la cantidad de filas/columnas indicada
	TableroSDL(int columns, int rows);
	virtual ~TableroSDL();
	//dibuja el tablero y sus componentes
	int dibujar(bool fin);
	//Dada una posicion, obtiene la golosina en esa ubicacion
	Golosina* getGolosinaConPosicion(unsigned int, unsigned int);
	//Dada una posicion, obtiene la celda en esa ubicacion
	CeldaSDL* getCeldaFromPos(unsigned int, unsigned int);
	//Obtiene una celda a partir del numero de la misma
	CeldaSDL* getCelda(unsigned int);
	//Setea una imagen de fondo a partir de una ruta a la imagen
	void setFondo(std::string);
	//Devuelve la posicion del extremo superior izquierdo de la celda
	unsigned int getPosCorner(unsigned int);
	unsigned int getNumeroColumnas();
	unsigned int getNumeroFilas();
	unsigned int getAncho();
	void createPuntajes(Json::Value value, unsigned int x);
	void inicializarTablero(Json::Value tablero);
	void actualizarPuntajes(Json::Value puntajes);
    void vaciarJugadas();
    void addJugada(Jugada* jug);
    bool hayJugadas();
    void dibujarSinFondo();
	//Baja las golosinas de partir de cierta posicion
	void bajarGolosina(unsigned int);
	//Repone una golosina en la columna indicada
	void reponerGolosina(Golosina*, unsigned int columna);
	void habilitarDibujarJugadas();
	bool getDibujarJugadas();
	void bajarGolosinaPixels(unsigned int nCelda, int nPixels);

private:
	unsigned int columnas;
	unsigned int filas;
	std::vector<CeldaSDL*> celdas;
	SDL_Surface* fondo;
	std::vector<Puntaje*> puntajes;
	std::vector<Jugada*> jugadas;
	bool dibujarJugadas;
	TableroSDL(const TableroSDL& tablero);
	Mix_Chunk *explode;
};

#endif /* TABLEROSDL_H_ */
